<?php

defined('_IN_CMS') or die('Fuck off');

trait data
{
    // Trait для обработки информации
    // is_valid_* - возвращают true или false
    // filter_* - возвращают обработанный вариант

    function getExtension($filename) {
        // Получить расширение файла
        $path_info = pathinfo($filename);
        return $path_info['extension'];
    }

    public function filter_lower_latin($var)
    {
        // Возвращает строку из a-z
        return preg_replace('/[^a-z]+/iu', '', $var);
    }
    public function filter_double_char($var)
    {
        // Удаляет повторяющиеся символы
        return preg_replace('/ {2,}/',' ',$text1);
    }
    public function filter_lower_latin_space($var)
    {
        // Возвращает строку из a-z и пробела
        return preg_replace('/[^a-z\s]+/iu', '', $var);
    }
    public function filter_latin($var)
    {
        // Возвращает строку из A-Za-z
        return preg_replace('/[^A-Za-z]+/iu', '', $var);
    }
    public function filter_lat_rus_space($var)
    {
        // Возвращает строку из A-zА-яЁё и пробела
        return preg_replace('/[^a-zа-яА-ЯёЁ\s]+/iu', '', $var);
    }

    // Мат-фильтр, начало
    static private $translitTableFrom = array(
        'a', 'b', 'v', 'g', 'd', 'e', 'g', 'z', 'i', 'y', 'k', 'l', 'm', 'n', 'o', 'p',
        'r', 's', 't', 'u', 'f', 'i', 'e', 'A', 'B', 'V', 'G', 'D', 'E', 'G', 'Z', 'I',
        'Y', 'K', 'L', 'M', 'N', 'O', 'P', 'R', 'S', 'T', 'U', 'F', 'I', 'E', 'yo', 'h',
        'ts', 'ch', 'sh', 'shch', 'yu', 'ya', 'YO', 'H', 'TS', 'CH', 'SH', 'SHCH', 'YU', 'YA');

    static private $translitTableTo = array(
        'а', 'б', 'в', 'г', 'д', 'е', 'ж', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п',
        'р', 'с', 'т', 'у', 'ф', 'ы', 'э', 'А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ж', 'З', 'И',
        'Й', 'К', 'Л', 'М', 'Н', 'О', 'П', 'Р', 'С', 'Т', 'У', 'Ф', 'Ы', 'Э', 'ё', 'х',
        'ц', 'ч', 'ш', 'щ', 'ю', 'я', 'Ё', 'Х', 'Ц', 'Ч', 'Ш', 'Щ', 'Ю', 'Я'
    );
    
    static private $badWords = array(
        "/^.*ху(й|и|я|е|л(и|е)).*/u", "/^.*пи(з|с)д.*/u", "/^бля.*/u", "/^.*бля(д|т|ц).*/u", 
        "/^(с|сц)ук(а|о|и).*/u", "/^еб.*/u", "/^.*уеб.*/u", "/^заеб.*/u", "/^.*еб(а|и)(н|с|щ|ц).*/u", 
        "/^.*ебу(ч|щ).*/u", "/^.*п(и|ы)д(о|е)р.*/u", "/^.*хер.*/u", "/^г(а|о)ндон/u", "/^.*залуп.*/u");

    public function filter_swear($string)
    {
        $swearingFound = false; 
        // Разбиваем строку на слова
        $elems = explode (" ", $string); 
        $count_elems = count($elems);
        
        for ($i = 0; $i < $count_elems; $i++) {
            //Transliterate alnum filterter string. We can`t use strtr due to UTF8.
            $str_rep = str_replace(self::$translitTableFrom,self::$translitTableTo,
                preg_replace('/[^a-zA-Zа-яА-Яё]/u', '', mb_strtolower($elems[$i], 'UTF8')));
                        
            // Поиск мата
            $countBadWords = count(self::$badWords);
            for ($k = 0; $k < $countBadWords; $k++) {
                if (preg_match(self::$badWords[$k], $str_rep)) {
                    $elems[$i] = str_repeat('*', mb_strlen($elems[$i], 'UTF8') - 1);
                    $swearingFound = true;
                    break;
                }
            }
        }

        if ($swearingFound) {
            $string = implode (" ", $elems);
        }
        
        return $string;
    }
    // Мат-фильтр, конец

    // Обработка e-mail
    public function is_valid_email($var)
    {
        // Проверка на валидность адреса e-mail
        if (filter_var($var, FILTER_VALIDATE_EMAIL)) {
            return true;
        } else {
            return false;
        }
    }

    public function is_valid_url($var) {
        // Проверка на валидность URL-адреса
        if (filter_var($var, FILTER_SANITIZE_URL)) {
            return true;
        } else {
            return false;
        }
    }

    public function is_valid_ip($var) {
        // Проверка на валидность IP-адреса
        if (filter_var($var, FILTER_VALIDATE_IP)) {
            return true;
        } else {
            return false;
        }
    }

    public function is_valid_login($var) {
        // Проверка логина
        $var_cmp = $var;
        $quotes = array ("\x27", "\x22", "\x60", "\t", "\n", "\r", "'", ",", "/", "¬", ";", "+", 
        "~", "=", ")", "(", "*", "&", "^", "%", "<", ">", "?", "!", '"');
        $var = str_replace($quotes, '', $var);
        $var = trim(htmlspecialchars((stripslashes($var)), ENT_QUOTES));
        $var = str_replace('/', '', $var);
        $var = str_replace('.', '', $var);
        $var = trim(str_replace('`', '', $var));
        return ($var == $var_cmp) ? true : false;
    }

    public function is_valid_password($var) {
        // Проверка пароля
        $var_cmp = $var;
        $quotes = array ("\x27", "\x22", "\x60", "\t", "\n", "\r", "'", ",", "/", "¬", ";",  "+", 
        "~", "=", ")", "(", "*", "&", "^", "%", "<", ">", "?", "!", '"');
        $var = str_replace($quotes, '', $var);
        $var = trim(htmlspecialchars((stripslashes($var)), ENT_QUOTES));
        $var = str_replace('/', '', $var);
        $var = str_replace('.', '', $var);
        $var = trim(str_replace('`', '', $var));
        return ($var == $var_cmp) ? true : false;
    }

    public function filter_tags($var) {
        // Фильтрует специальные символы < и >
        $var = trim($var);
        $var = str_replace("<", "&lt;", $var);
        $var = str_replace(">", "&gt;", $var);
        $var = nl2br($var, false);
        return $var;
    }

    public function filter_bb($var) {
        // Преобразует BB-теги в HTML-теги
        // $text = preg_replace("#\[B\](.+?)\[/B\]#is",'<b>\\1</b>',$text);
        $var = str_replace("[b]", "<strong>", $var); // Жирный текст
        $var = str_replace("[/b]", "</strong>", $var);
        $var = str_replace("[i]", "<em>", $var); // Наклонный
        $var = str_replace("[/i]", "</em>", $var);
        $var = str_replace("[s]", "<s>", $var); // Зачёркнутый
        $var = str_replace("[/s]", "</s>", $var);
        $var = str_replace("[u]", '<u>', $var); // Подчёркнутый
        $var = str_replace("[/u]", '</u>', $var);
        $var = str_replace("[red]", '<span class="bbred">', $var); // Красный
        $var = str_replace("[green]", '<span class="bbgreen">', $var); // Зелёный
        $var = str_replace("[blue]", '<span class="bbblue">', $var); // Синий
        $var = str_replace("[/red]", "</span>", $var);
        $var = str_replace("[/green]", "</span>", $var);
        $var = str_replace("[/blue]", "</span>", $var);
        $var = str_replace('[h1]', '<h1 class="article_h1">', $var); // Заголовок 1
        $var = str_replace('[/h1]', '</h1>', $var);
        $var = str_replace('[h2]', '<h2 class="article_h2">', $var); // Заголовок 2
        $var = str_replace('[/h2]', '</h2>', $var);
        $var = str_replace('[h3]', '<h3 class="article_h3">', $var); // Заголовок 3
        $var = str_replace('[/h3]', '</h3>', $var);
        $var = str_replace('[h4]', '<h4 class="article_h4">', $var); // Заголовок 4
        $var = str_replace('[/h4]', '</h4>', $var);
        $var = str_replace('[h5]', '<h5 class="article_h5">', $var); // Заголовок 5
        $var = str_replace('[/h5]', '</h5>', $var);
        $var = str_replace('[h6]', '<h6 class="article_h6">', $var); // Заголовок 6
        $var = str_replace('[/h6]', '</h6>', $var);
        $var = str_replace('[h7]', '<h7 class="article_h7">', $var); // Заголовок 7
        $var = str_replace('[/h7]', '</h7>', $var);
        $var = str_replace('[spoiler]', '<a class="spoiler" href="#spoiler">Показать содержимое<div class="spoiler-content">', $var); // Споилер
        $var = str_replace('[/spoiler]', '</div></a>', $var);
        $var = str_replace('[q]', '<q class="quote">', $var); // Цитата
        $var = str_replace('[/q]', '</q>', $var);
        $var = str_replace('[cmd]', '<span class="cmd">', $var); // Клавиатурное сокращение, команда
        $var = str_replace('[/cmd]', '</span>', $var);
        $var = str_replace('[php]', '<span class="php"><pre><code>', $var); // Код с подсветкой синтаксиса
        $var = str_replace('[/php]', '</code></pre></span>', $var);
        $var = str_replace('[p]', '<p class="bbp">', $var); // Параграф
        $var = str_replace('[/p]', '</p>', $var);
        /* Параграф, центр */
        return $var;
    }
    
    public function filter_smileys($text)
    {
        // преобразует теги в смайлы, изображения и пр.

        $text = trim($text);

        // изображения инструментов GIMP
        for ($t=1; $t<=33; $t++) {
            $text = str_replace('[tool='.$t.']', '<img src="/inc/php/html/themes/0/images/gimp_tools/'.$t.'.png" border="0" width="30" height="32" alt="[T]">', $text);
        }
        // Заменяем переносы строк на теги переноса строки
        $text = nl2br($text, false);
        $text = str_replace(chr(10).'<br>', '', $text);
        $text = str_replace('</h4><br>', '</h4>', $text);
        return $text;
    }
    
    public function img_convert($id, $article, $images_ar)
    {
        $pattern = '/\[img=(.*?)\]/imx';
        $replace = '
                <span id=gallery onmouseover=\'L.info=0;L.panelType=2;\' class="imgp">
                <a href=\'/data/articles/'.$id.'/$1\' rel=\'iLoad|Статья\' title=\'\'>
                <img src="/data/articles/'.$id.'/$1" alt="img" class="article_image"></a></span>';
        $article = preg_replace($pattern, $replace, $article);
        //$article = str_replace('1', '2', $article);
        return $article;
    }
    
    public function filter_gb_message($text)
    {
        return $text;
    }
    
    public function getTranslited($str) {
        // Получить текст на транслите
        $tr = array(
            "а"=>"a","б"=>"b",
            "в"=>"v","г"=>"g","д"=>"d","е"=>"e", "ё"=>"yo", "ж"=>"zh",
            "з"=>"z","и"=>"i","й"=>"y","к"=>"k","л"=>"l",
            "м"=>"m","н"=>"n","о"=>"o","п"=>"p","р"=>"r",
            "с"=>"s","т"=>"t","у"=>"u","ф"=>"f","х"=>"h",
            "ц"=>"ts","ч"=>"ch","ш"=>"sh","щ"=>"sch","ъ"=>"y",
            "ы"=>"y","ь"=>"","э"=>"e","ю"=>"yu","я"=>"ya", " "=>"_",
            "А"=>"a","Б"=>"b",
            "В"=>"v","Г"=>"g","Д"=>"d","Е"=>"e", "Ё"=>"yo", "Ж"=>"zh",
            "З"=>"z","И"=>"i","Й"=>"y","К"=>"k","Л"=>"l",
            "М"=>"m","Н"=>"n","О"=>"o","П"=>"p","Р"=>"r",
            "С"=>"s","Т"=>"t","У"=>"u","Ф"=>"f","Х"=>"h",
            "Ц"=>"ts","Ч"=>"ch","Ш"=>"sh","Щ"=>"sch","Ъ"=>"y",
            "Ы"=>"y","Ь"=>"","Э"=>"e","Ю"=>"yu","Я"=>"ya");
        return strtr($str, $tr);
    }
    
    public function createThumb($name_big, $name_small, $max_x, $max_y) {
        // Создание миниатюры изображения
        list($x, $y, $t, $attr) = getimagesize($name_big);
      
        if ($t == IMAGETYPE_GIF) {
            $big = imagecreatefromgif($name_big);
        } elseif ($t == IMAGETYPE_JPEG) {
            $big = imagecreatefromjpeg($name_big);
        } elseif ($t == IMAGETYPE_PNG) {
            $big = imagecreatefrompng($name_big);
        } else return;    

        if ($x > $y) {
            $xs = $max_x;
            $ys = $max_x/($x/$y);
        } else {
            $ys = $max_y;
            $xs = $max_y/($y/$x);
        }
        $small = imagecreatetruecolor ($xs, $ys);
        $res = imagecopyresampled($small,$big, 0, 0, 0, 0, $xs, $ys, $x, $y);
        imagedestroy($big);
        imagejpeg($small,$name_small);
        imagedestroy($small);       
    }
}

?>
